package com.dwjm.utlis;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtil {

    // 定义一个静态常量,作为 JWT 的签名密钥,这里的 KEY 可以换成你自己的
    private static final String KEY = "strcy";

    /**
     * 接收业务数据，生成 JWT Token 并返回
     *
     * @param claims 业务数据，以 Map 形式传入，将被存储在 JWT 的 claims 中
     * @return 生成的 JWT Token 字符串
     */
    public static String genToken(Map<String, Object> claims) {
        return JWT.create() //创建一个JTW生成器
                .withClaim("claims", claims) // 添加载荷 将业务数据添加到 JWT 的 claims 中
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60)) //设置 Token 的过期时间
                .sign(Algorithm.HMAC256(KEY)); //签名  使用 HMAC256 算法加密
    }

    /**
     * 接收 JWT Token，验证 Token，并返回业务数据
     *
     * @param token 需要验证的 JWT Token 字符串
     * @return 验证通过后，返回 JWT 中存储的业务数据（Map 形式）
     */
    public static Map<String, Object> parseToken(String token) {
        return JWT.require(Algorithm.HMAC256(KEY)) // 使用 HMAC256 算法和密钥进行验证
                .build() // 构建JWT验证器
                .verify(token) // 验证token是否正确
                .getClaim("claims") //提取 JWT 中的保存的数据
                .asMap();//将业务数据转换为 Map 形式并返回
    }
}
